<?php
/**
 * --------------------------------
 * # phpless 核心类：启动 phpless
 * --------------------------------
 * 1. 开启调试
 * 2. 开始 SESSION
 * 3. 加载自定义函数库
 * 4. 加载 Composer
 * 5. 加载路由
 * --------------------------------
 */
namespace phpless\core;

class Phpless
{
    // 启动框架
    static public function run()
    {
        // dump("OK");
        // 定义时区
        self::setTimezone();
        // 是否开启调试模式
        self::appDebug();
        // 开启 SESSION 
        self::sessionStart();
        // 加载自定义函数库
        self::loadFunctions();
        // 加载 Composer
        self::loadComposer();
        // 加载路由
        self::loadRoute();
    }
    // 是否开启调试模式 APP_DEBUG
    static protected function appDebug()
    {
        $app_debug = config('APP_DEBUG') ? 'On' : 'Off';
        ini_set('display_errors', $app_debug);
        return true;
    }
    // 是否开启 SESSION
    static protected function sessionStart()
    {
        $session_auto_start = config('SESSION_AUTO_START');
        if($session_auto_start){
            session_start();
        }
        return true;
    }
    // 加载自定义函数库
    static protected function loadFunctions()
    {
        $app_function_path = APP_FUNCTION_PATH;
        // 判断目录是否存在
        if(is_dir($app_function_path)){
            $app_function_files = scandir($app_function_path);
            foreach($app_function_files as $k => $v){
                // 去除 当前目录 ./ 、上级目录 ../
                if($v == '.' || $v == '..'){
                    continue;
                }
                $app_function_file_full_path = $app_function_path . DIRECTORY_SEPARATOR . $v;
                if(is_file($app_function_file_full_path)){
                    include $app_function_file_full_path;
                }
            }
            unset($app_function_file_full_path);
        }
        unset($app_function_path);
        return true;
    }
    // 加载 Composer：如果存在 ./vendor/autoload.php 则加载、若无则不加载
    static protected function loadComposer()
    {
        $composer_autoload_file = APP.DIRECTORY_SEPARATOR.'vendor'.DIRECTORY_SEPARATOR.'autoload.php';
        if(is_file($composer_autoload_file)){
            include $composer_autoload_file;
        }
        return true;
    }
    // 加载路由
    static protected function loadRoute()
    {
        $route = Route::getInstance();
        // dump($route);
        // 加载控制器类
        $module = $route -> module;
        $ctrlClass = $route -> ctrl;
        $action = $route -> action;
        $ctrl = C($ctrlClass,$module);
        // 访问方法
        $ctrl -> $action();
    }
    // 定义时区
    static protected function setTimezone()
    {
        $time_zone = config('TIMEZONE') ?: 'PRC';
        date_default_timezone_set($time_zone);
        return true;
    }
}
